__pci_disable_msix(vector);
}
-void pci_cleanup_msi(struct pci_dev *dev)
+void pci_cleanup_msi(u8 bus, u8 devfn)
{
+ struct pci_dev *dev = get_msi_pdev(bus, devfn);
+
+ if ( !dev )
+ return;
msi_free_vectors(dev);
+
+ /* Disable MSI and/or MSI-X */
+ msi_set_enable(dev, 0);
+ msix_set_enable(dev, 0);
}
while ( !list_empty(&hd->pdev_list) )
{
pdev = list_entry(hd->pdev_list.next, typeof(*pdev), list);
+ pci_cleanup_msi(pdev->bus, pdev->devfn);
reassign_device_ownership(d, dom0, pdev->bus, pdev->devfn);
}
extern void set_msi_irq_affinity(unsigned int irq, cpumask_t mask);
extern int pci_enable_msi(u8 bus, u8 devfn, int vector, int entry_nr, int msi);
extern void pci_disable_msi(int vector);
+extern void pci_cleanup_msi(u8 bus, u8 devfn);
struct msi_desc {
struct {